<?php
    //使用登录函数
    require_once('Schedule\login_tool.php');
    //使用DOM
    require_once('Schedule\simple_html_dom.php');

    class Schedule extends CI_Controller
    {
        public function __construct()
        {
            parent::__construct();//PHP不会自动调用父类的构造函数，所以得手动调用
            $this->load->model('schedule_model');//加载位于models文件下的Schedule_Model类，这个类负责数据的操作，即操作数据库
            //要使用login.php中的form_open和validation_errors，必须加载‘表单辅助函数’
            //$this->load->helper('form');
        }

        //获取表单数据，显示课表
        public function show_schedule()
        {
            //关闭错误信息(因为下面encode函数会报错，为了美观，将显示错误信息功能关闭)
	        error_reporting(E_ALL^E_NOTICE^E_WARNING);
	        $jwurl = "http://csujwc.its.csu.edu.cn/jsxsd/xk/LoginToXk";
	        $kburl = "http://csujwc.its.csu.edu.cn/jsxsd/xskb/xskb_list.do?Ves632DSdyV=NEW_XSD_WDKB";
	        $cookie = dirname(__FILE__).'/cookie.txt'; //设置cookie保存的路径


            //Attention: 此处应添加验证代码
            //-------------------------------------
	        $account = $_POST["account"];
            $password = $_POST["password"];            
            $account_encode = encode($account);//编码函数有错误
	        $password_encode = encode($password);
	        $post = array('encoded'=>$account_encode."%%%".$password_encode);
            login_post($jwurl, $cookie, $post); //调用模拟登录
            

            //获取指定学期时间段的课表页面
            $turmtime = $_POST["terms"];//$turmtime = '2018-2019-1';
            $post = http_build_query(array('cj0701id'=>'', 'zc'=>'', 'demo'=>'', 'xnxq01id'=>$turmtime,'sfFD'=>'1'));  
            //通过POST方法获取页面，防止因教务系统课表更新，而导致无法读取课表         
            $content = get_content_post($kburl, $cookie, $post);

            
            //通过寻找页面特征，判断是否登录成功
            $html = str_get_html($content);
            //正常情况下id=kbtable的表格应该含有两个
            if (count($html->find('table[id=kbtable]')) < 2){
                echo "登录失败！";//-----------------------------------后期需要设计一个View
                return;
            }
            

            //判断是否存在学生记录
            if (!($this->schedule_model->check_student_exist($account))){
                //如果不存在
                //添加学生信息
                $this->schedule_model->insert_student(array('id'=>$account, 'password'=>$password));
            }

            //判断数据库是否存在记录
            if($this->schedule_model->check_classtable_exist($turmtime)){
                //直接显示课表
                //$this->load->view('schedule_table', array('classtable'=>$this->schedule_model->get_class_table_by_id($account)));
                $this->load->view('schedule_table', array('classtable'=>$this->schedule_model->get_class_table_by_id_and_term($account, $turmtime)));               
                $this->output->_display();//加上这一句才可以显示
            }
            else{
                //抓取课表数据，存入数据库
                //获取课表
                $html = str_get_html($content);
                $content = $html->find('table[id=kbtable]', 0);
                for ($i = 1; $i <= 6; $i++)
                    for ($j = 1; $j <= 7; $j++){
                        $str = $this->get_class_info($content, $i, $j);
                        $class['id'] = $account;
                        $class['classname'] = $str['classname']; 
                        if ($class['classname'] == '&nbsp;')
                            continue;
                        $class['week'] = $str['week']; 
                        $class['number'] = sprintf("%d:%02d-%02d", $j, 2*$i-1, 2*$i);
                        $class['classroom'] = $str['classroom']; 
                        $class['teacher'] = $str['teacher'];
                        $class['term'] = $turmtime;// 增加了学期信息
                        $this->schedule_model->insert_class($class);
                    }
                
                $this->load->view('schedule_table', array('classtable'=>$this->schedule_model->get_class_table_by_id_and_term($account, $turmtime)));
                $this->output->_display();//加上这一句才可以显示
                //var_dump($str);
            }

            
            //echo $content;
            @unlik($cookie); //删除cookie文件
        }

        //登录页面
        public function login()
        {
            $this->load->view('login');//这个函数的作用即可以理解为显示views文件夹下的login.php页面
        }

        //由只包含课表表格的html文本获取课程信息
        //$table：只包含课程表的html文本
        //$row：表格行数(节次)
        //$col：表格列数(星期几)
        //$row = 1 $col = 1表示 星期一 1-2节
        function get_class_info($table ,$row = 1, $col = 1)
        {
            $col--;
            $html = str_get_html($table);
            $element = $html->find('tr', $row)->find('td', $col);
            $str = $element->find('div.kbcontent1', 0)->innertext;
            $str = explode('<br/>', $str);
            $info['classname'] = $str[0];
            $info['week'] = $element->find('font[title=周次(节次)]', 0)->innertext;//->innertext();
            $info['classroom'] = $element->find('font[title=教室]', 0)->innertext;//->innertext();
            $info['teacher'] = $element->find('font[title=老师]', 0)->innertext;//->innertext();
            return $info;
        }

        //检查是否登录成功
        public function check_login($content)
        {
            
        }




    }
?>